1. Field of the Invention
This invention relates to personal computers and more particularly to personal computers which utilize a microprocessor such as the Intel 80386 and which are also adapted to use a complementary numeric coprocessor circuit for performing certain processor functions in parallel with the system primary microprocessor.
2. Description of the Related Art
The field of personal computers has rapidly developed in response to increased consumer demand and business use. Today many functions and computations formerly too complex for any computer system other than mainframe, large scale systems are being performed on personal computer systems.
The increase of the complexity and capability of systems has followed the development of the microprocessor, the primary component in any personal computer system. One microprocessor family which has been widely utilized is the 8088, 80286 and 80386 series manufactured by Intel. Each of these successive developments provided enhanced processor speed and capability. Fairly early in the development of this and other microprocessors it was recognized that many of the time consuming numeric computations could be performed by a companion processor or coprocessor operating in parallel with the primary processor. The primary advantage achieved was that the coprocessor would operate essentially independently to process time consuming computations such as complex mathematical computations, leaving the processor free to more expeditiously control program execution, input/output control and other requirements of the computer system.
While these coprocessor circuits were highly desirable in some applications, they were relatively expensive and not desirable for al personal computer systems. Hence, the industry developed personal computer systems in which coprocessors could be added as an option at the time of manufacture of the system or as an add-on or expansion for those applications where the cost of the additional processor was justified.
Since the coprocessor was an optional feature, the primary microprocessor continued to be designed as a full-function processor capable of performing all the tasks which would be delegated to the coprocessor if available. It therefore was necessary that the microprocessor system include some means of detecting whether a coprocessor was present in the system.
In the past, several methods or means have been utilized to signal or indicate the presence of a coprocessor circuit. In most systems which utilized Intel coprocessors such as the 80287 and 80387, which are companion circuits for the 80286 and 80386 processors, the detection means was a switch manually set by the user to indicate whether a coprocessor was installed. The status of this switch was read by the processor under program control executed upon system initialization.
Alternatively, in the case of coprocessors such as that manufactured by Weitek and used with Intel processors, a separate pin was provided on the coprocessor circuit so that when the coprocessor was installed a designated output from the coprocessor socket was taken to a low voltage active state. The state of this output terminal was read by the processor under program control during system initialization.
The Intel 80386 processor was designed to accommodate either the 80287 or 80387 coprocessors. As originally designed by Intel, the 80386 identified the type of coprocessor, as distinguished from the presence of a coprocessor, by sampling the ERROR* signal provided from the coprocessor some time after the trailing, falling edge of the system reset signal (active high) and before executing the first coprocessor instruction. After a hardware reset, the 80287 keeps its ERROR* output at an inactive high voltage level. The 80387 ERROR* output is maintained at an active low level after reset. In order to function as designed, the ERROR* output from the 80287 or 80387 was to be connected directly to the ERROR* input on the 80386 processor.
As designed by Intel, it was intended that the 80386 processor would read the ERROR* input and store its state in the ET bit of the processor's control register zero. If the ET bit was low, indicating an 80387 coprocessor, the processor would employ a thirty-two bit protocol for communicating with the coprocessor. If the ET bit was high, a sixteen bit protocol was utilized.
While this procedure, if followed, provided a satisfactory signal indicating a 80387 coprocessor was present (active low level), the high level signal was ambiguous, since a high level could also signify that no coprocessor was attached or that a coprocessor was attached in a non-standard manner.
To resolve this ambiguity, prior systems have required a switch to be manually set and its status determination included as part of system initialization software such as the BIOS routine in DOS. Alternatively, a software routine was utilized to identify the presence of a coprocessor and select the appropriate protocol. An example of an appropriate software recognition routine is provided at pages 5-9, 10 of the Intel 80386 reference manual, copyrighted 1987. This routine basically determined the presence of a coprocessor by attempting write and read instructions to the coprocessor and compared the results to determine if the ones and zeros were correctly read and written by the coprocessor. Once the presence of a coprocessor was confirmed, the type of coprocessor was then determined by comparing results of test calculations which produce different results with the 80287 coprocessors than with the 80387 coprocessor. However, certain sequences could cause the processor to lock up awaiting a response from the coprocessor, which would not occur, thus rendering the entire system inoperative.
One example of non-standard installations which became popular was the IBM AT and AT compatible designs. In IBM compatible systems, the ERROR* signal from the coprocessor is not provided as to the coprocessor ERROR* input to the processor, but is instead provided as an interrupt input (IRQ13) to the interrupt control circuitry. Thus in prior art, IBM-compatible systems the ERROR* signal is not available for use to set the ET bit in the processor control register. Furthermore, the utilization of the ERROR* signal to set the ET bit in the 80386 processor has not been accepted by the industry as a reliable means for coprocessor detection.